﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using ERP_RORZE_DLL.Product.DAO;
using ERP_RORZE_PERMISSION.Base;
using ERP_RORZE_PRODUCT.Product.DAO;
using ERP_RORZE_DLL.Product.database;
using ERP_RORZE_TOOL.Common;
using BaseDAO = ERP_RORZE_TOOL.DBAccess.BaseDAO;
using Utilities = ERP_RORZE_TOOL.Common.Utilities;

namespace ERP_RORZE_PRODUCT.Product.XLBM
{
    public partial class frm_DataANOAdd : DevExpress.XtraEditors.XtraForm
    {
        ClsXLBM clsXLBM = new ClsXLBM();
        ClsWTSDAO clsWTSDAO = new ClsWTSDAO();
        public event EventHandler Reload;
        DulieuANO ANO = new DulieuANO();
        DataTable dt6;
        private bool dropDown;
        private LogUtils log;
        bool flag;
        public frm_DataANOAdd()
        {
            InitializeComponent();
            log = new LogUtils();
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void frm_DataANOAdd_Load(object sender, EventArgs e)
        {
            // đổ dữ liệu vào grid

            dt6 = clsXLBM.GetDulieuslMa();
            gridControl1.DataSource = dt6;
            gridView1.BestFitColumns();

            //list staff
            DataTable dt;
            dt = clsWTSDAO.GetAllStaff();
            DataRow r = dt.NewRow();
            r["FullName"] = "";
            r["StaffID"] = "";
            dt.Rows.InsertAt(r, 0);
            cbStaff.DataSource = dt;
            cbStaff.DisplayMember = "FullName";
            cbStaff.ValueMember = "StaffID";

            //list me ma
            DataTable dt1;
            dt1 = BaseDAO.ExecuteQuery("select * from [242_MeMa] order by [Number]");
            DataRow r1 = dt1.NewRow();
            r1["Some"] = "";
            dt1.Rows.InsertAt(r1, 0);
            cbMeMa.DataSource = dt1;
            cbMeMa.DisplayMember = "Number";
            cbMeMa.ValueMember = "Some";

            //list MONo
            DataTable dt2;
            dt2 = clsXLBM.GetMONo();
            DataRow r2 = dt2.NewRow();
            r2["MONo"] = "";
            dt2.Rows.InsertAt(r2, 0);

            //List<ClsMOTable> objs = new List<ClsMOTable>();
            //foreach (DataRow r3 in dt2.Rows)
            //{
            //    ClsMOTable obj = new ClsMOTable();
            //    obj.MONo = r3["MONo"].ToString();
            //    obj.MOQty = int.Parse(r3["MOQty"].ToString());
            //    obj.PartID = r3["PartID"].ToString();
            //    obj.Moc8chinh = r3["Moc8chinh"].ToString();
            //    objs.Add(obj);
            //}

            cbOrderNo.DataSource = dt2;
            cbOrderNo.DisplayMember = "MONo";
            cbOrderNo.ValueMember = "MONo";
            flag = true;
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            if (GetData())
            {

                ANO.Chieu_day_mang = decimal.Parse(txtChieuDayMangMa.Text);
                ANO.Code = cbStaff.SelectedValue.ToString();
                ANO.Date = dateDate.DateTime;
                ANO.AnoQuan = int.Parse(txtSoLuongMa.Text);
                ANO.Times = int.Parse(txtSoLanMaLai.Text);
                ANO.AnoNo = cbMeMa.SelectedValue.ToString();
                ANO.OrderNo = cbOrderNo.Text;
                ANO.Tank3_NaOH = decimal.Parse(txtNongDoNAOH.Text);
                ANO.Tank3_Times = decimal.Parse(txtTGNhungNAOH.Text);
                ANO.Tank8_H2SO4 = decimal.Parse(txtNongDoH2SO4.Text);
                ANO.Tank8_Temp = decimal.Parse(txtNhietDoH2SO4.Text);
                ANO.Tank8_Times = decimal.Parse(txtTGNhungH2SO4.Text);
                ANO.PartNo = lblPartID.Text;
                ANO.MoQuan = int.Parse(txtSlLenh.Text);
                ANO.Sltreo = int.Parse(lblMoc.Text);
                ANO.P_sinh = txtPSinh.Text;
                ANO.Phuong_phap = txtPPXuly.Text;
                ANO.Tank3_Temp = decimal.Parse(txtNhietDoNAOH.Text);
                ANO.Maibong = decimal.Parse(txtNongDoMaiBong.Text);
                ANO.Maibong_Temp = decimal.Parse(txtNhietDoMaiBong.Text);
                ANO.Maibong_Times = decimal.Parse(txtTGNhungMaiBong.Text);

                if (clsXLBM.InsertDataANO(ANO) > 0)
                {

                    //write Log
                    log.Table = LogConstant.Table.Product.XLBM;
                    log.Task = LogConstant.Task.Insert;
                    log.Description = "OrderNo: " + ANO.OrderNo + "; Date: " + ANO.Date + "; PartNo: " + ANO.PartNo;
                    log.WriteLog();

                    MessageBox.Show("Đã nhập xong");
                    cbMeMa.Text = "";
                    cbOrderNo.Text = "";
                    //cbStaff.Text = "";
                    txtChieuDayMangMa.Text = "0";
                    txtSoLuongMa.Text = "0";
                    txtSoLanMaLai.Text = "0";
                    txtSlLenh.Text = "0";
                    lblPartID.Text = "";
                    //txtNongDoNAOH.Text = "0.1";
                    //txtNongDoH2SO4.Text = "0.2";
                    //txtNongDoMaiBong.Text = "0.9";
                    //txtNhietDoH2SO4.Text = "15";
                    //txtNhietDoMaiBong.Text = "90";
                    //txtNhietDoNAOH.Text = "35";
                    //txtTGNhungH2SO4.Text = "20";
                    //txtTGNhungMaiBong.Text = "2";
                    //txtTGNhungNAOH.Text = "2";
                    //txtPPXuly.Text = "";
                    //txtPSinh.Text = "";
                    cbOrderNo.Focus();
                }
                else
                {
                    MessageBox.Show("Gặp lỗi khi thêm dữ liệu.");

                }

            }

        }

        private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
        {

            //string Boder = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "OderNo").ToString();
            //DataTable Part = clsXLBM.GetPartID(Boder);
            //foreach (DataRow r in Part.Rows)
            //{
            //    lblPartID.Text = r["BOrder"].ToString();
            //}
        }

        private void cbOrderNo_SelectedValueChanged(object sender, EventArgs e)
        {
            if (flag)
            {
                lblMoc.Text = "";
                //ClsMOTable obj = ((ClsMOTable)cbOrderNo.SelectedItem);
                //lblPartID.Text = obj.PartID.ToString();
                //txtSlLenh.Text = obj.MOQty.ToString();
                //lblMoc.Text = obj.Moc8chinh.ToString();

                DataTable dtmo = clsXLBM.GetByMONo(cbOrderNo.Text);
                if (dtmo.Rows.Count > 0)
                {
                    lblMoc.Text = dtmo.Rows[0]["Moc8chinh"].ToString();
                    lblPartID.Text = dtmo.Rows[0]["PartID"].ToString();
                    txtSlLenh.Text = dtmo.Rows[0]["MOQty"].ToString();
                    txtSoLuongMa.Text = dtmo.Rows[0]["MOQty"].ToString();
                }

                if (lblMoc.Text == "")
                {
                    lblMoc.Text = "0";
                }

                gridView1.ActiveFilterString = "[OrderNo] = '" + cbOrderNo.Text.Trim() + "'";
            }

        }

        private void cbOrderNo_DropDown(object sender, EventArgs e)
        {
            dropDown = true;
        }

        private void cbOrderNo_DropDownClosed(object sender, EventArgs e)
        {
            dropDown = false;

        }

        protected override bool ProcessKeyPreview(ref Message m)
        {
            if (m.Msg == 0x0100 && (int)m.WParam == 13)
            {
                this.ProcessTabKey(true);
            }
            return base.ProcessKeyPreview(ref m);
        }

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            // Add controls for which Arrow keys => focus is not required.
            if ((!dropDown && (ActiveControl is TextBox || ActiveControl is System.Windows.Forms.ComboBox || ActiveControl is System.Windows.Forms.DateTimePicker)))
            {
                switch (keyData)
                {
                    case Keys.Up:
                        //case Keys.Down:

                        //bool forward = (keyData == Keys.Down);
                        if (this.ProcessTabKey(false))
                        {
                            return true;
                        }

                        break;
                }
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

        private bool GetData()
        {
            if (Utilities.IsNullOrEmpty(cbOrderNo.SelectedValue) || cbOrderNo.SelectedItem == cbOrderNo.Items[0])
            {
                MessageBox.Show(@"Bạn phải nhập số Order.", ToolConstants.Form.MessageBox.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
                cbOrderNo.Focus();
                return false;
            }

            if (Utilities.IsNullOrEmpty(cbMeMa.SelectedValue) || cbMeMa.SelectedItem == cbMeMa.Items[0])
            {
                MessageBox.Show(@"Bạn phải nhập số thứ tự mẻ Mạ.", ToolConstants.Form.MessageBox.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
                cbMeMa.Focus();
                return false;
            }

            if (Utilities.IsNullOrEmpty(txtSoLuongMa.Text.Trim().Equals("")) || int.Parse(txtSoLuongMa.Text) < 0)
            {
                MessageBox.Show(@"Bạn phải nhập số lượng mạ.", ToolConstants.Form.MessageBox.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtSoLuongMa.Focus();
                return false;
            }


            DataRow[] drTemp = clsXLBM.GetDulieuslMa().Select("M1 = '" + cbOrderNo.SelectedValue.ToString() + txtSoLanMaLai.Text + "'");
            int intX = 0;
            if (drTemp.Length > 0 && !Utilities.IsNullOrEmpty(drTemp[0]["AnoQuan"].ToString()))
            {
                intX = int.Parse(drTemp[0]["AnoQuan"].ToString());
            }

            if ((int.Parse(txtSoLuongMa.Text) + intX) > int.Parse(txtSlLenh.Text))
            {
                MessageBox.Show("Số lượng mẻ mạ phải nhỏ hơn hoặc bằng slg lệnh. \nHoặc tổng slg đã nhập trong cùng lần Mạ và số lượng nhập mới lớn hơn slg lệnh rồi. \nXem lại đây có phải là bị Mạ lại không.", ToolConstants.Form.MessageBox.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtSoLuongMa.Focus();
                return false;
            }

            if (Utilities.IsNullOrEmpty(txtSoLanMaLai.Text.Trim().Equals("")) || int.Parse(txtSoLanMaLai.Text) < 0)
            {
                MessageBox.Show(@"Bạn phải nhập số lần mạ.", ToolConstants.Form.MessageBox.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtSoLanMaLai.Focus();
                return false;
            }

            if (Utilities.IsNullOrEmpty(cbStaff.SelectedValue) || cbStaff.SelectedItem == cbStaff.Items[0])
            {
                MessageBox.Show(@"Bạn phải nhập code nhân viên.", ToolConstants.Form.MessageBox.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
                cbStaff.Focus();
                return false;
            }

            if (Utilities.IsNullOrEmpty(txtChieuDayMangMa.Text.Trim().Equals("")) || decimal.Parse(txtChieuDayMangMa.Text) < 0)
            {
                MessageBox.Show(@"Bạn phải nhập độ dày mạng mạ.", ToolConstants.Form.MessageBox.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtChieuDayMangMa.Focus();
                return false;
            }


            return true;
        }

        private void frm_DataANOAdd_KeyDown(object sender, KeyEventArgs e)
        {

            if (e.Alt)
            {
                if (e.KeyCode == Keys.D)
                {
                    this.btnAdd.PerformClick();
                }
            }
            else if (e.KeyCode == Keys.End)
            {
                btnAdd.Focus();
            }
            else if (e.KeyCode == Keys.Home)
            {
                dateDate.Focus();
            }
        }

        private void cbOrderNo_KeyDown(object sender, KeyEventArgs e)
        {

            //if (e.KeyCode == Keys.Enter)
            //{
            //    if (cbOrderNo.Text.Trim().Length > 0)
            //    {
            //        gridView1.ActiveFilterString = "[OrderNo] = '" + cbOrderNo.Text.Trim() + "'";
            //    }
            //}
        }
    }
}